home *** CD-ROM | disk | FTP | other *** search
-
- /* Copyright (c) Mark J. Kilgard, 1994. */
-
- /* This program is freely distributable without licensing fees
- and is provided without guarantee or warrantee expressed or
- implied. This program is -not- in the public domain. */
-
- #include <QDOffscreen.h>
-
- #include "glut.h"
- #include "glutint.h"
-
- #include <stdlib.h>
-
- #define GET_CONFIG(attrib)\
- {\
- if(!__glutCurrentWindow)\
- {\
- __glutWarning("glutGet: no active window");\
- return -1;\
- }\
- \
- if(__glutCurrentWindow->renderWin == __glutCurrentWindow->win)\
- {\
- aglDescribePixelFormat(__glutCurrentWindow->vis, attrib, &value);\
- }\
- }
-
- int glutGet(GLenum param)
- {
- CWindowPtr win;
- Rect *l_rect, *g_rect;
- PixMapHandle pixmap;
- GLint x, y, value;
- unsigned int width, height;
-
- switch (param)
- {
- case GLUT_INIT_WINDOW_X:
- return __glutInitX;
- case GLUT_INIT_WINDOW_Y:
- return __glutInitY;
- case GLUT_INIT_WINDOW_WIDTH:
- return __glutInitWidth;
- case GLUT_INIT_WINDOW_HEIGHT:
- return __glutInitHeight;
- case GLUT_INIT_DISPLAY_MODE:
- return __glutDisplayMode;
- case GLUT_WINDOW_X:
- if(!__glutCurrentWindow)
- {
- __glutWarning("glutGet: no active window");
- return -1;
- }
-
- if(__glutCurrentWindow->fullscreen) return 0;
-
- win = __glutCurrentWindow->win;
- pixmap = GetGWorldPixMap(win);
- g_rect = &(**pixmap).bounds;
- x = -g_rect->left;
- return x;
- case GLUT_WINDOW_Y:
- if(!__glutCurrentWindow)
- {
- __glutWarning("glutGet: no active window");
- return -1;
- }
-
- if(__glutCurrentWindow->fullscreen) return 0;
-
- win = __glutCurrentWindow->win;
- pixmap = GetGWorldPixMap(win);
- g_rect = &(**pixmap).bounds;
- l_rect = &win->portRect;
- y = -g_rect->top + l_rect->bottom;
- return y;
- case GLUT_WINDOW_WIDTH:
- if(!__glutCurrentWindow)
- {
- __glutWarning("glutGet: no active window");
- return -1;
- }
-
- if(__glutCurrentWindow->fullscreen) return __glutCurrentWindow->width;
-
- if(!__glutCurrentWindow->reshape)
- {
- win = __glutCurrentWindow->win;
- pixmap = GetGWorldPixMap(win);
- g_rect = &(**pixmap).bounds;
- l_rect = &win->portRect;
- width = l_rect->right;
- return width;
- }
- return __glutCurrentWindow->width;
- case GLUT_WINDOW_HEIGHT:
- if(!__glutCurrentWindow)
- {
- __glutWarning("glutGet: no active window");
- return -1;
- }
-
- if(__glutCurrentWindow->fullscreen) return __glutCurrentWindow->height;
-
- if(!__glutCurrentWindow->reshape)
- {
- win = __glutCurrentWindow->win;
- pixmap = GetGWorldPixMap(win);
- g_rect = &(**pixmap).bounds;
- l_rect = &win->portRect;
- height = l_rect->bottom;
- return height;
- }
- return __glutCurrentWindow->height;
- case GLUT_WINDOW_BUFFER_SIZE:
- GET_CONFIG(AGL_BUFFER_SIZE);
- return value;
- case GLUT_WINDOW_STENCIL_SIZE:
- GET_CONFIG(AGL_STENCIL_SIZE);
- return value;
- case GLUT_WINDOW_DEPTH_SIZE:
- GET_CONFIG(AGL_DEPTH_SIZE);
- return value;
- case GLUT_WINDOW_RED_SIZE:
- GET_CONFIG(AGL_RED_SIZE);
- return value;
- case GLUT_WINDOW_GREEN_SIZE:
- GET_CONFIG(AGL_GREEN_SIZE);
- return value;
- case GLUT_WINDOW_BLUE_SIZE:
- GET_CONFIG(AGL_BLUE_SIZE);
- return value;
- case GLUT_WINDOW_ALPHA_SIZE:
- GET_CONFIG(AGL_ALPHA_SIZE);
- return value;
- case GLUT_WINDOW_ACCUM_RED_SIZE:
- GET_CONFIG(AGL_ACCUM_RED_SIZE);
- return value;
- case GLUT_WINDOW_ACCUM_GREEN_SIZE:
- GET_CONFIG(AGL_ACCUM_GREEN_SIZE);
- return value;
- case GLUT_WINDOW_ACCUM_BLUE_SIZE:
- GET_CONFIG(AGL_ACCUM_BLUE_SIZE);
- return value;
- case GLUT_WINDOW_ACCUM_ALPHA_SIZE:
- GET_CONFIG(AGL_ACCUM_ALPHA_SIZE);
- return value;
- case GLUT_WINDOW_DOUBLEBUFFER:
- GET_CONFIG(AGL_DOUBLEBUFFER);
- return value;
- case GLUT_WINDOW_RGBA:
- GET_CONFIG(AGL_RGBA);
- return value;
- case GLUT_WINDOW_COLORMAP_SIZE:
- GET_CONFIG(AGL_RGBA);
- return 0;
- case GLUT_WINDOW_PARENT:
- if(!__glutCurrentWindow)
- {
- __glutWarning("glutGet: no active window");
- return -1;
- }
-
- return __glutCurrentWindow->parent ? __glutCurrentWindow->parent->num + 1 : 0;
- case GLUT_WINDOW_NUM_CHILDREN:
- if(!__glutCurrentWindow)
- {
- __glutWarning("glutGet: no active window");
- return -1;
- }
-
- {
- int num = 0;
- GLUTwindow *children = __glutCurrentWindow->children;
-
- while (children)
- {
- num++;
- children = children->siblings;
- }
- return num;
- }
- case GLUT_WINDOW_NUM_SAMPLES:
- return 0;
- case GLUT_WINDOW_STEREO:
- GET_CONFIG(AGL_STEREO);
- return value;
- case GLUT_WINDOW_CURSOR:
- if(!__glutCurrentWindow)
- {
- __glutWarning("glutGet: no active window");
- return -1;
- }
-
- return __glutCurrentWindow->cursor;
- case GLUT_SCREEN_WIDTH:
- if(__glutCurrentWindow && __glutCurrentWindow->fullscreen) return __glutCurrentWindow->width;
-
- return (qd.screenBits.bounds.right - qd.screenBits.bounds.left);
- case GLUT_SCREEN_HEIGHT:
- if(__glutCurrentWindow && __glutCurrentWindow->fullscreen) return __glutCurrentWindow->height;
-
- return (qd.screenBits.bounds.bottom - qd.screenBits.bounds.top);
- case GLUT_SCREEN_WIDTH_MM:
- if(__glutCurrentWindow && __glutCurrentWindow->fullscreen) return __glutCurrentWindow->width;
-
- return (qd.screenBits.bounds.right - qd.screenBits.bounds.left);
- case GLUT_SCREEN_HEIGHT_MM:
- if(__glutCurrentWindow && __glutCurrentWindow->fullscreen) return __glutCurrentWindow->height;
-
- return (qd.screenBits.bounds.bottom - qd.screenBits.bounds.top);
- case GLUT_MENU_NUM_ITEMS:
- return __glutGetCurNumMenuItems();
- case GLUT_DISPLAY_MODE_POSSIBLE:
- {
- AGLPixelFormat vi;
- Bool dummy;
-
- vi = __glutDetermineVisual(__glutDisplayMode, &dummy, __glutGetVisualInfo);
- if(vi)
- {
- aglDestroyPixelFormat(vi);
- return 1;
- }
- return 0;
- }
- case GLUT_ELAPSED_TIME:
- {
- double beginning;
-
- __glutInitTime(&beginning);
- return (int) (__glutTime() - beginning);
- }
- default:
- __glutWarning("invalid glutGet parameter: %d", param);
- return -1;
- }
-
- return -1;
- }
-